//package com.ruoyi.system.webSocket;/**
// * @description:
// * @author: cc
// * @create: 2024-10-21 11:19
// **/
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.stereotype.Component;
//
//import javax.websocket.*;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.concurrent.atomic.AtomicInteger;
//
///**
// *@Auther:卷卷
// *@Date:2024/10/21 11:19
// *@Description: WebSocketServer
// *@Version 1.0.0
// */
//@Component
//@Slf4j
//@ServerEndpoint("/api/pushMessage/{userId}")
//public class WebSocketServer {
//
//    /**静态变量，用来记录当前在线连接数*/
//    private static final AtomicInteger onlineCount = new AtomicInteger(0);
//    /**concurrent包的线程安全Set，用来存放每个客户端对应的WebSocket对象。*/
//    private static final ConcurrentHashMap<String, WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
//    /**与某个客户端的连接会话，需要通过它来给客户端发送数据*/
//    private Session session;
//    /**接收userId*/
//    private String userId;
//
//    /**
//     * 连接建立成功调用的方法
//     */
//    @OnOpen
//    public void onOpen(Session session, @PathParam("userId") String userId) {
//        this.session = session;
//        this.userId = userId;
//        if (webSocketMap.containsKey(userId)) {
//            webSocketMap.remove(userId);
//            // 加入map中
//            webSocketMap.put(userId, this);
//        } else {
//            // 加入map中
//            webSocketMap.put(userId, this);
//            // 在线数加1
//            onlineCount.incrementAndGet();
//        }
//        System.out.println("用户连接:" + userId + ",当前在线人数为:" + onlineCount);
//        sendMessage("连接成功");
//    }
//
//    /**
//     * 连接关闭调用的方法
//     */
//    @OnClose
//    public void onClose() {
//        if (webSocketMap.containsKey(userId)) {
//            webSocketMap.remove(userId);
//            // 在线人数减1
//            onlineCount.decrementAndGet();
//        }
//        log.info("用户退出:" + userId + ",当前在线人数为:" + onlineCount);
//    }
//
//
//    /**
//     * 实现服务器主动推送
//     */
//    public void sendMessage(String message) {
//        this.session.getAsyncRemote().sendText("123123");
//    }
//
//    /**
//     * 收到客户端消息后调用的方法
//     * @param message
//     * @param session
//     */
//    @OnMessage
//    public void onMessage(String message, Session session) {
//        log.info("用户消息:" + userId + ",报文:" + message);
//        // 解析发送的报文
//        JSONObject jsonObject = JSON.parseObject(message);
//        // 获取需要转发的用户id
//        String toUserId = jsonObject.getString("userId");
//        log.info("toUserId:" + toUserId);
//        // 传送给对应toUserId用户的websocket
//        if (StringUtils.isNotBlank(toUserId) && webSocketMap.containsKey(toUserId)) {
//            webSocketMap.get(toUserId).sendMessage(message);
//            log.info("消息发送成功");
//        } else {
//            log.error("请求的userId:" + toUserId + "不在该服务器上");
//        }
//    }
//
//
//    /**
//     * 发生异常调用方法
//     */
//    @OnError
//    public void onError(Session session, Throwable error) {
//        log.error("用户错误:" + this.userId + ",原因:" + error.getMessage());
//        error.printStackTrace();
//    }
//
//    /**
//     *发送自定义消息
//     **/
//    public static void sendInfo(String message, String userId) {
//        log.info("发送消息到:" + userId + "，报文:" + message);
//        if (StringUtils.isNotBlank(userId) && webSocketMap.containsKey(userId)) {
//            webSocketMap.get(userId).sendMessage(message);
//        } else {
//            log.error("用户" + userId + ",不在线！");
//        }
//    }
//
//}
